package com.hk.service.order;

import java.math.BigDecimal;
import java.util.List;

import com.hk.commons.HqlFilter;
import com.hk.commons.entity.order.OrderInfo;
import com.hk.commons.utils.order.OrderCreateMsg;
import com.hk.commons.vo.OrderStrMsg;

public interface IOrderHandle<T> {

	/**
	 * 获取订单的相关信息，并且返回结果为字符串
	 * 
	 * @param
     *
	 * @return
	 */
	public T findById(long id);

	default Long saveOrder(T t) {
		return null;
	};

	/**
	 * 火柴调用该接口，生成订单
	 * 
	 * @param
     *
	 * @param userId
	 * @return
	 */

	default Boolean updOrderInfo(Long userId, Long orderId, Integer routeId) {
		return false;
	};

	default Boolean updOrderInfo(Long userId, Long orderId) {
		return false;
	};

	default Long createOrderRoute(Long userId, Long orderId, Integer companyId) {
		return null;
	};

	/**
	 * 创建火柴订单
	 * @param productId
	 * @param userId
	 * @param userCardId
	 * @return
	 */
	default OrderCreateMsg create(Long productId, Long userId, Long userCardId) {
		return null;
	};

	/**
	 * 链接富有创建订单
	 * 
	 * @param productId
	 * @param userId
	 * @param
     *
	 * @return
	 */
	default OrderCreateMsg createOrder(Long productId, Long userId,
			Long paymentId, Long userCardId) {
		return null;
	};
	
	 
	/**
	 * 连接富有金账户创建订单
	 * @param productId 
	 * @param userId
	 * @param userCardId
	 * @param amount
	 * @param
     * ：预授权合同号
	 * @return
	 */
	default OrderInfo createFYJZHOrder(Long productId, Long userId,
			  Long userCardId, BigDecimal amount) {
		return null;
	};

	/**
	 * 重新检查订单信息
	 * 
	 * @param
     *
	 * @param userId
	 * @return
	 */
	default boolean reCheck(Long userId, Long orderId) {
		return false;
	};

	/**
	 * 获取订单的相关信息，并且返回结果为字符串
	 * 
	 * @param orderId
	 * @return
	 */
	default OrderStrMsg getStrInfoById(Long orderId) {
		OrderStrMsg resp = new OrderStrMsg();
		return resp;
	};

	/**
	 * 获取订单的相关信息，并且返回结果为字符串
	 * 
	 * @param orderId
	 * @return
	 */
	default OrderStrMsg getStrInfoById(Long userId, Long orderId) {
		OrderStrMsg resp = new OrderStrMsg();
		return resp;
	};

	/**
	 * 获取订单信息
	 * 
	 * @param orderId
	 * @param userId
	 * @param routeId
	 * @return
	 */
	default OrderStrMsg getOrderInfo(Long orderId, Long userId, Integer routeId) {
		OrderStrMsg resp = new OrderStrMsg();
		return resp;
	}

	/**
	 * 从redis 中获取异常的订单
	 * 
	 * @param
     *
	 * @return
	 */
	default List<OrderStrMsg> getAllExceptionOrder() {
		return null;
	};

	/**
	 * 重新检查火柴的异常订单
	 * 
	 * @param
     *
	 * @return
	 */
	default Boolean reCheckHCOrder() {
		return true;
	};

	default List<T> query(HqlFilter hqlFilter) {
		return null;
	};

	default Long countByFilter(HqlFilter hqlFilter) {
		return null;
	};

	default void checkAllOrderInRedis() {
	}

	/**
	 * 如果订单已到期，则更改订单的状态为已到期
	 */
	default void updPayBackOrder() {
	}
}
